#include <stdio.h>
#include "unistd.h"
#include "stdlib.h"
#include "sys/types.h"
#include "sys/wait.h"
#include "string.h"

int main(int argc, char const *argv[])
{
    int fd[2];
    int err = pipe(fd);
    if (err == -1)
    {
        perror("管道创建失败");
    }
    else
    {
        printf("管道创建成功, 读管道fd: %d, 写管道fd: %d\n", fd[0], fd[1]);
    }

    char buf[1024];
    int pid = fork();
    if (pid == -1)
    {
        perror("进程fork失败");
    }
    else if (pid > 0)
    {
        // 父进程向管道写数据, 子进程从管道读数据

        // 父进程用来向管道写数据, 所以关掉fd[0]
        close(fd[0]);

        printf("这是父进程, 请输入数据: \n");
        while (1)
        {
            scanf("%s", buf);
            write(fd[1], buf, strlen(buf));
        }
    }
    else if (pid == 0)
    {
        // 子进程用来从管道读数据, 所以关掉fd[1]
        close(fd[1]);

        while (1)
        {
            int len = read(fd[0], buf, sizeof(buf));
            printf("这是子进程, 读到数据: %.*s\n", len, buf);
        }
    }

    return 0;
}
